/*
  Programa GEFE - Gestión de eventos lúdicos.
  Copyright (C) 2010  Antonio Ramírez Marti

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "nuevoeventodialog.h"
#include "ui_nuevoeventodialog.h"
#include <QFileDialog>
#include <QMessageBox>

nuevoEventoDialog::nuevoEventoDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::nuevoEventoDialog)
{
    ui->setupUi(this);
    setup();
}

void nuevoEventoDialog::setup()
{
    connect(ui->iniDateEdit,SIGNAL(dateChanged(QDate)),this,SLOT(setFechaIni(QDate)));
    connect(ui->finDateEdit,SIGNAL(dateChanged(QDate)),this,SLOT(setFechaFin(QDate)));
    connect(this,SIGNAL(nuevasFechas(QDate,QDate)),ui->calendarWidget,SLOT(setDateRange(QDate,QDate)));
    connect(this,SIGNAL(nuevoInicio(QDate)),ui->calendarWidget,SLOT(setSelectedDate(QDate)));
    connect(ui->buttonBox,SIGNAL(accepted()),this,SLOT(enviarNuevoEvento()));
    connect(ui->archivoButton,SIGNAL(toggled(bool)),this,SLOT(setArchivoVisible(bool)));
    connect(ui->eventiLine,SIGNAL(textChanged(QString)),this,SLOT(filtraNombreEvento(QString)));
    connect(ui->buscarButton,SIGNAL(clicked()),this,SLOT(seleccionarDirectorio()));

    ui->iniDateEdit->setDate(QDate::currentDate());
    ui->finDateEdit->setDate(QDate::currentDate());

    directorio=QString(".");

    setArchivoVisible(false);
}

nuevoEventoDialog::~nuevoEventoDialog()
{
    delete ui;
}

QDate nuevoEventoDialog::getFechaIni() const
{ return fechaIni; }

QDate nuevoEventoDialog::getFechaFin() const
{ return fechaFin; }

void nuevoEventoDialog::enviarNuevoEvento()
{
    if(fechaIni > fechaFin)
        QMessageBox::warning(this,"Problema en Crear Evento","La fecha de inicio es posterior a la fecha de fin del evento. Por favor, vuelva a intentarlo.");
    else if (ui->eventiLine->text().isEmpty())
        QMessageBox::warning(this,"Problema en Crear Evento","No se introdujo el nombre del evento. Por favor, vuelva a intentarlo.");
    else if (ui->archivoLine->text().isEmpty())
        QMessageBox::warning(this,"Problema en Crear Evento","No se introdujo la dirección del archivo de evento. Por favor, vuelva a intentarlo.");
    else {
    QStringList *datos =new QStringList();

    datos->append(ui->eventiLine->text());
    datos->append(ui->archivoLine->text());
    datos->append(this->fechaIni.toString("yyyy-MM-dd"));
    datos->append(this->fechaFin.toString("yyyy-MM-dd"));

    emit this->nuevoEvento(*datos);
    }
}

void nuevoEventoDialog::setFechaFin(QDate fecha)
{
    this->fechaFin=fecha;
    if(fechaIni > fechaFin) {
        fechaIni=fechaFin;
        ui->iniDateEdit->setDate(fechaFin);
    }

    emit this->nuevasFechas(fechaIni,fechaFin);
}

void nuevoEventoDialog::setFechaIni(QDate fecha)
{
    this->fechaIni=fecha;

    if(fechaIni > fechaFin) {
        fechaFin=fechaIni;
        ui->finDateEdit->setDate(fechaFin);
    }

    emit this->nuevasFechas(fechaIni,fechaFin);
    emit this->nuevoInicio(fechaIni);
}

void nuevoEventoDialog::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

void nuevoEventoDialog::filtraNombreEvento(QString evento)
{
    QString nombreArchivo=evento.replace(QChar(' '),QString("_"));
    ui->archivoLine->setText(directorio+'/'+nombreArchivo.toLower()+".gfb");
}

void nuevoEventoDialog::setArchivoVisible(bool estado)
{
    if(estado)
        muestraLineaArchivo();
    else ocultaLineaArchivo();
}

bool nuevoEventoDialog::isArchivoVisible() const
{
    return (!ui->line->isHidden());
}

void nuevoEventoDialog::ocultaLineaArchivo()
{
    ui->archivoLine->setShown(false);
    ui->line->setShown(false);
    ui->buscarButton->setShown(false);
    ui->archivoLabel->setShown(false);
}

void nuevoEventoDialog::muestraLineaArchivo()
{
    ui->archivoLine->setShown(true);
    ui->line->setShown(true);
    ui->buscarButton->setShown(true);
    ui->archivoLabel->setShown(true);

}

void nuevoEventoDialog::seleccionarDirectorio()
{
    setDirectorio(QFileDialog::getExistingDirectory(this,"Selecciona directorio de salida",QString()));
    this->filtraNombreEvento(ui->eventiLine->text());
}

void nuevoEventoDialog::setDirectorio(QString directorio)
{
    this->directorio=directorio;
}

QString nuevoEventoDialog::getDirectorio() const
{
    return directorio;
}
